package com.tbit.uqbike.service.business;

import com.tbit.uqbike.object.pojo.*;
import com.tbit.uqbike.object.pojo.dto.AfterSaleContactDTO;
import com.tbit.uqbike.object.pojo.dto.EditGiftCardExpireDateDTO;
import com.tbit.uqbike.object.pojo.dto.UpdateBlackListDTO;
import com.tbit.uqbike.object.pojo.vo.AdvertConfigAdAccount;
import com.tbit.uqbike.object.pojo.vo.CouponCheckVO;
import com.tbit.uqbike.object.pojo.vo.UserGiftCardAreaVO;
import com.tbit.uqbike.object.pojo.vo.UserRefundLogVO;
import com.tbit.common.entity.view.Result;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 额外功能接口
 *
 * @Author:BUGTian
 * @DATE: 2022/6/10
 */
public interface SupportService {

    /**
     * 定时任务执行
     *
     * @param className  类名
     * @param methodName 方法名
     * @return
     */
    Result executeTask(String className, String methodName);

    /**
     * 获取用户修改礼品卡推荐区域
     *
     * @param userId 用户id
     * @return
     */
    List<UserGiftCardAreaVO> getUserGiftCardRecommendArea(Integer userId);

    /**
     * 根据品牌id查询旗下所有加盟商和区域账号
     *
     * @param brandId 品牌id
     * @return
     */
    Result<List<AccountUser>> queryAccountUserByBrandId(Integer brandId);

    /**
     * 会员卡置为失效
     *
     * @param orderNO       订单编号
     * @param oldExpireDate 旧到期时间
     * @param newExpireDate 新到期时间
     * @return
     */
    Result editVipCardExpireDate(String orderNO, String oldExpireDate, String newExpireDate);

    /**
     * 查询优惠券绑定的活动和优惠券套餐
     *
     * @param couponId
     * @return
     */
    CouponCheckVO deleteCouponCheck(Integer couponId);

    /**
     * 根据商户订单号查询退款日志
     *
     * @param orderNO
     * @return
     */
    List<UserRefundLogVO> queryUserRefundLogByOrderNO(String orderNO);

    /**
     * 平台服务费催缴
     *
     * @param rushPayFeeConfig
     * @param accountId
     * @return
     */
    Result editRushPayFeeConfig(RushPayFeeConfig rushPayFeeConfig, Integer accountId);


    /**
     * 查询平台服务费催缴配置
     *
     * @param accountId
     * @return
     */
    RushPayFeeConfig queryRushPayFeeConfig(Integer accountId);

    /**
     * 礼品卡置为失效
     *
     * @param editGiftCardExpireDateDTO
     * @return
     */
    Result editGiftCardExpireDate(EditGiftCardExpireDateDTO editGiftCardExpireDateDTO);

    /**
     * 举报管理，清洁上报，摆车上报，巡检上报 驳回
     *
     * @param logId
     * @param type
     * @return
     */
    Result rejectControl(Integer logId, Integer type);

    /**
     * 查询附近站点审核信息
     *
     * @param adAccountId
     * @param lat
     * @param lon
     * @param distance
     * @param mapType
     * @return
     */
    List<ParkPointApply> queryNearByParkPointApply(Integer adAccountId, Double lat, Double lon, Integer distance, Integer mapType);

    /**
     * 批量修改站点容量和误差范围
     *
     * @param file
     * @param adAccountId
     * @return
     */
    Result batchUpdateParkPointAllowRangeAndCapacity(MultipartFile file, Integer adAccountId, Integer mapType);

    /**
     * 获取批量修改站点模板
     *
     * @param adAccountId
     * @param type
     * @return
     */
    Result getBatchUpdateParkPointTemplate(Integer adAccountId, Integer type, Integer mapType);

    /**
     * 根据品牌id查询品牌下配置了区域广告配置的区域
     *
     * @param accountId
     * @return
     */
    List<AdvertConfigAdAccount> queryAdvertConfigAdAccount(Integer accountId);

    /**
     * 删除广告配置
     *
     * @param accountId
     */
    void deleteAdvertConfig(Integer accountId);

    /**
     * 修改售后联系方式
     *
     * @param afterSaleContactDTO
     * @return
     */
    Result editAfterSaleContact(AfterSaleContactDTO afterSaleContactDTO);

    /**
     * 获取售后联系方式
     *
     * @param accountId
     * @return
     */
    Result<List<AfterSaleContact>> getAfterSaleContact(Integer accountId);

    /**
     * 更新用户黑名单
     *
     * @param updateBlackListDTO
     * @return
     */
    Result updateUserBlackList(UpdateBlackListDTO updateBlackListDTO);

    /**
     * 查询品牌虚拟充值功能配置
     *
     * @param brandId
     * @return
     */
    VirtualRechargeFunction queryVirtualRechargeFunction(Integer brandId);

    /**
     * 修改品牌虚拟充值功能配置
     *
     * @param virtualRechargeFunction
     */
    void updateVirtualRechargeFunction(VirtualRechargeFunction virtualRechargeFunction);

    Result batchUpdateParkFeature(MultipartFile file, Integer accountId);

    Result getBatchUpdateParkFeatureTemplate(Integer adAccountId, Integer type);
}
